package aspects;

import java.util.HashMap;

import dominio.Persona;

public aspect ContadorLlamadasAspect {

	HashMap<Persona, HashMap<String, Integer>> hashCounter = new HashMap<>();

	pointcut monitoredCall(Persona persona):
		call (@Monitored * dominio.*.* (..)) && target(persona);  // CAMBIOS!

	before(Persona persona): monitoredCall(persona) {

		String nombreMetodo = thisJoinPoint.getSignature().getName();

		if (hashCounter.containsKey(persona)) {

			if (hashCounter.get(persona).containsKey(nombreMetodo)) {

				HashMap<String, Integer> hashPer = hashCounter.get(persona);
				hashPer.put(nombreMetodo, hashPer.get(nombreMetodo) + 1);
			} else {
				hashCounter.get(persona).put(nombreMetodo, 1);
			}
		} else {
			HashMap<String, Integer> hashNombreMetodo = new HashMap<>();
			hashNombreMetodo.put(nombreMetodo, 1);
			hashCounter.put(persona, hashNombreMetodo);
		}
	}

	public int cantLlamadas(Persona persona, String nombreMetodo) {

		return hashCounter.containsKey(persona)
				&& hashCounter.get(persona).containsKey(nombreMetodo) ?  // CAMBIOS!
						hashCounter.get(persona).get(nombreMetodo) : 0;
	}
}